/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package interfaces;
import entidades.Voo;
import erros.ErroAtualizacao;
import erros.ErroCadastramento;
import erros.ErroRecuperacao;
import erros.ErroRemocao;
import java.util.ArrayList;
import entidades.Cidade;

/**
 * Interface que provê os serviços prestados pela controladora
 * de negócio da entidade Voo.
 * @author thiagostuckert
 * @author daniel
 */
public interface IGerenciaVoo {

    /**
     * Recupera um voo atraves do codigo do voo.
     * @param voo codigo do voo a ser recuperado.
     * @return voo voo armazenado no banco.
     * @throws ErroRecuperacao lança exceção caso a ação
     * não obtenha sucesso.
     */
    Voo recuperarVoo(Voo voo) throws ErroRecuperacao;
    /**
     * Recupera os voos cadastrados no banco de dados.
     * @return Retorna a lista de voos cadastrados.
     * @throws ErroRecuperacao Joga a exceção de erro de recuperação.
     */

    ArrayList<Voo> recuperarVoos() throws ErroRecuperacao;
    /**
     * Recupera os voos baseados em uma cidade de origem, uma de destino
     * e uma data de partida
     * @param cidadeOrigem Cidade de origem do voo a ser recuperado.
     * @param cidadeDestino Cidade de destino do voo a ser recuperado.
     * @param dataPartida Data de partida do Voo a ser recuperado.
     * @return Retorna a lista de voos recuperados.
     * @throws ErroRecuperacao Joga a exceção de erro de recuperação.
     */
     ArrayList<Voo> recuperarVoos(Cidade cidadeOrigem,
            Cidade cidadeDestino,String dataPartida) throws ErroRecuperacao;

    /**
     * Cadastra o Voo no banco de dados.
     * @param voo Voo a ser cadastrado.
     * @throws ErroCadastramento Joga exceção do erro de cadastramento.
     */
    public void cadastrarVoo(Voo voo) throws ErroCadastramento;

    /**
     * Deleta o voo do banco de dados.
     * @param  voo  voo a ser deletado.
     * @throws ErroRemocao Joga a exceção erro de cadastramento.
     */
    public void deletarVoo(Voo voo) throws ErroRemocao;

    /**
     * Atualiza o um voo com novos dados.
     * @param vooVelho Voo a ser atualizado.
     * @param vooNovo Voo com dados atualizados.
     * @throws ErroAtualizacao Joga exceção de erro de atualização.
     */
    public void atualizarVoo(Voo vooVelho, Voo vooNovo) throws ErroAtualizacao;
}
